Make frame configurations start with a distinctive symbol.
authorJim Blandy <jimb@redhat.com>
Mon, 15 Mar 1993 08:51:02 +0000 (08:51 +0000)
committerJim Blandy <jimb@redhat.com>
Mon, 15 Mar 1993 08:51:02 +0000 (08:51 +0000)
* frame.el (current-frame-configuration): Return a list as before,
but starting with `frame-configuration'.
(set-frame-configuration): Check that CONFIGURATION is a list
starting with `frame-configuration', strip it off, and do as before.
(frame-configuration-p): New function.
* register.el (jump-to-register): Use frame-configuration-p,
instead of catching an error in set-frame-configuration.  Really now.

lisp/frame.el
lisp/register.el

index e52d50de04b387a111f27d0065e99ddcb097cb4e..989b3efa2ecc961b8a54c372051575ee4d26cb2c 100644 (file)
@@ -284,25 +284,32 @@ additional frame parameters that Emacs recognizes for X window frames."
 
 (defun current-frame-configuration ()
   "Return a list describing the positions and states of all frames.
-Each element is a list of the form (FRAME ALIST WINDOW-CONFIG), where
-FRAME is a frame object, ALIST is an association list specifying
-some of FRAME's parameters, and WINDOW-CONFIG is a window
-configuration object for FRAME."
-  (mapcar (function
-          (lambda (frame)
-            (list frame
-                  (frame-parameters frame)
-                  (current-window-configuration frame))))
-         (frame-list)))
+Its car is `frame-configuration'.
+Each element of the cdr is a list of the form (FRAME ALIST WINDOW-CONFIG),
+where
+  FRAME is a frame object,
+  ALIST is an association list specifying some of FRAME's parameters, and
+  WINDOW-CONFIG is a window configuration object for FRAME."
+  (cons 'frame-configuration
+       (mapcar (function
+                (lambda (frame)
+                  (list frame
+                        (frame-parameters frame)
+                        (current-window-configuration frame))))
+               (frame-list))))
 
 (defun set-frame-configuration (configuration)
   "Restore the frames to the state described by CONFIGURATION.
 Each frame listed in CONFIGURATION has its position, size, window
 configuration, and other parameters set as specified in CONFIGURATION."
-  (let (frames-to-delete)
+  (or (frame-configuration-p configuration)
+      (signal 'wrong-type-argument
+             (list 'frame-configuration-p configuration)))
+  (let ((config-alist (cdr configuration))
+       frames-to-delete)
     (mapcar (function
             (lambda (frame)
-              (let ((parameters (assq frame configuration)))
+              (let ((parameters (assq frame config-alist)))
                 (if parameters
                     (progn
                       (modify-frame-parameters frame (nth 1 parameters))
@@ -311,6 +318,13 @@ configuration, and other parameters set as specified in CONFIGURATION."
            (frame-list))
     (mapcar 'delete-frame frames-to-delete)))
 
+(defun frame-configuration-p (object)
+  "Return non-nil if OBJECT seems to be a frame configuration.
+Any list whose car is `frame-configuration' is assumed to be a frame
+configuration."
+  (and (consp object)
+       (eq (car object) 'frame-configuration)))
+
 \f
 ;;;; Convenience functions for accessing and interactively changing
 ;;;; frame parameters.
index 885e5c5a0a72e6c1f3b5a958e8837af08fec2444..25167cf4abdaf9c7f1ad85a0ec4de89944e38569 100644 (file)
@@ -72,16 +72,16 @@ configuration (all frames), restore that frame or all frames accordingly.
 Argument is a character, naming the register."
   (interactive "cJump to register: ")
   (let ((val (get-register char)))
-    (condition-case ()
-       (set-frame-configuration val)
-      (error
-       (if (window-configuration-p val)
-          (set-window-configuration val)
-        (if (markerp val)
-            (progn
-              (switch-to-buffer (marker-buffer val))
-              (goto-char val))
-          (error "Register doesn't contain a buffer position or configuration")))))))
+    (cond
+     ((frame-configuration-p val)
+      (set-frame-configuration val))
+     ((window-configuration-p val)
+      (set-window-configuration val))
+     ((markerp val)
+      (switch-to-buffer (marker-buffer val))
+      (goto-char val))
+     (t
+      (error "Register doesn't contain a buffer position or configuration")))))
 
 ;(defun number-to-register (arg char)
 ;  "Store a number in a register.